在使用 FreeRTOS 的过程中我们通常会在一个任务函数中使用延时函数对这个任务延时,当执行延时函数的时候就会进行任务切换, 并且此任务就会进入阻塞态,直到延时完成,任务重新进入就绪态。延时函数属于 FreeRTOS 的时间管理,

FreeRTOS 延时函数

函数 vTaskDelay()

在 UCOSIII 中延时函数 OSTimeDly()可以设置为三种模式:相对模式、周期模式和绝对模式。

在 FreeRTOS 中延时函数也有相对模式和绝对模式,不过在 FreeRTOS 中不同的模式用的函数不同,其中函数 vTaskDelay()是相对模式(相对延时函数),函数 vTaskDelayUntil()是绝对模式(绝对延时函数)。 函数 vTaskDelay()在文件 tasks.c 中有定义,要使用此函数的话宏 INCLUDE_vTaskDelay 必须为 1。

函数 prvAddCurrentTaskToDelayedList()

函数 prvAddCurrentTaskToDelayedList()用于将当前任务添加到等待列表中,函数在文件tasks.c 中有定义,

FreeRTOS 系统时钟节拍

不管是什么系统,运行都需要有个系统时钟节拍, xTickCount 就是FreeRTOS 的系统时钟节拍计数器。每个滴答定时器中断中 xTickCount 就会加一, xTickCount 的具体操作过程是在函数 xTaskIncrementTick()中进行的, 此函数在文件 tasks.c 中有定义,